#include<bits/stdc++.h>
using namespace std;
#define int long long
#define double long double
#define endl '\n'
int cas,n,m,t[200009],qr[200009],a[200009],ans[200009],cw[200009],win[20][200009],hi[200009],lg[200009];
bool ok[200009];
char s[20][200009];
void getwin(int R,int C){
    if(!R){win[R][C]=C;return ;}
    getwin(R-1,C*2-1);getwin(R-1,C*2);
    if(s[R][C]=='0')win[R][C]=(a[win[R-1][C*2-1]]>=R?win[R-1][C*2-1]:win[R-1][C*2]);
    else win[R][C]=(a[win[R-1][C*2]]>=R?win[R-1][C*2]:win[R-1][C*2-1]);
}
void gethi(int R,int C,int cur){
    if(!R){hi[C]=cur;return ;}
    gethi(R-1,C*2-1,cur);
    if(s[R][C]=='0'&&a[win[R-1][C*2-1]]>=R)gethi(R-1,C*2,R-1);
    else gethi(R-1,C*2,cur);
}
void getok(int R,int C,int mx){
    if(!R){if(a[C]>=mx)ok[C]=1;else ok[C]=0;return ;}
    if(s[R][C]=='0')getok(R-1,C*2-1,max(mx,R)),getok(R-1,C*2,mx);
    else getok(R-1,C*2-1,mx),getok(R-1,C*2,max(mx,R));
}
signed main(){
    freopen("arena.in","r",stdin);
    freopen("arena.out","w",stdout);
    ios::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    for(int i=2;i<=200000;i++)lg[i]=lg[i>>1]+1;
    cin>>n>>m;
    for(int i=1;i<=n;i++)cin>>t[i];
    for(int i=1;i<=m;i++)cin>>qr[i];
    for(int i=1;(1<<i-1)<n;i++)cin>>(s[i]+1);
    cin>>cas;
    while(cas--){
        int X[4];cin>>X[0]>>X[1]>>X[2]>>X[3];
        for(int i=1;i<=n;i++)a[i]=t[i]^X[i%4];
        ans[1]=cw[1]=1;
        for(int i=1;(1<<i-1)<n;i++){
            getwin(i,1);
            gethi(i,1,i);
            getok(i,1,0);
            // cerr<<i<<endl;
            // for(int j=1;j<=(1<<i);j++)cerr<<hi[j]<<' ';cerr<<endl;
            // for(int j=1;j<=(1<<i);j++)cerr<<ok[j]<<' ';cerr<<endl;
            for(int j=1;j<=(1<<i);j++)cw[j]=(hi[j]==i&&ok[j]?j:cw[j-1]);
            for(int j=1,c=(1<<i-1)+1;j<=(1<<i);j++){
                while(c<=(1<<i)){
                    if(j==c){c++;continue;}
                    int R=lg[(j-1)^(c-1)]+1;
                    int C=(j-1>>R)+1;
                    if(hi[j]<R)break;
                    if(s[R][C]=='0'&&a[j]>=R)c++;
                    else break;
                }
                if(j>(1<<i-1))ans[j]=cw[j]+((1<<i)+c)*((1<<i)-c+1)/2;
            }
        }
        // for(int i=1;i<=n;i++)cerr<<i<<' '<<ans[i]<<endl;
        int cc=0;
        for(int i=1;i<=m;i++)cc^=(ans[qr[i]]*i);
        cout<<cc<<endl;
    }
    return 0;
}